package com.proyecto.core.Utilidades;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FilePermission;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URL;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;

import sun.security.util.SecurityConstants;

import com.proyecto.core.modelo.excepciones.GeneralException;

public class UtilXML {
	static final public String VALOR_CIERTO   = "S";
	
	private static SAXBuilder builder = new SAXBuilder(false);
	
	static public Document crearXLM(String raiz){
	    Document doc = new Document(new Element(raiz));
	    return doc;
	}
	
	static public Element adicionarElementoAlRaiz(Document doc,
              String elementoNombre,
              String elementoTexto) {
	Element elemento = new Element(elementoNombre);
	elemento.setText(elementoTexto);
	doc.getRootElement().addContent(elemento);
	return elemento;
	}

	static public Element crearElemento(String NombreElemento, String textoElemento) {
		Element elemento = new Element(NombreElemento).setText(textoElemento);
		return elemento;
	}

	static public Document abrirXML(String xmlDocumento){
		String   ruta = null;
		Document doc  = null;
		
		try {
			doc = builder.build(xmlDocumento);
		} catch (JDOMException e1) {
			e1.printStackTrace();
		} catch (IOException e2) {
			e2.printStackTrace();
		} catch (Exception e3) {
			e3.printStackTrace();
		}
	return doc;	
	}
	
	static public File SalvarXML(String nombreArchivo, Document doc) throws GeneralException{
	    //procedemos a escribir el archivo
		File archivo = null;
		
	    XMLOutputter formato = new XMLOutputter(Format.getPrettyFormat());
	    try {
	      OutputStream archivoSalidaStream = new FileOutputStream(nombreArchivo);
	      formato.output(doc, archivoSalidaStream);
	      archivoSalidaStream.close();
	      archivo = new File(nombreArchivo);
	      FilePermission permisos = new FilePermission(nombreArchivo,
	    		  									   SecurityConstants.FILE_READ_ACTION    + "," + 
	      											   SecurityConstants.FILE_WRITE_ACTION   + "," +
	      											   SecurityConstants.FILE_EXECUTE_ACTION + "," +
	      											   SecurityConstants.FILE_DELETE_ACTION );
	    }
	    catch (FileNotFoundException ex1) {
	      throw new GeneralException("error.interfaz.xml.rutanoencontrada");
	    }
	   	catch (IOException ex) {
	      throw new GeneralException("error.interfaz.xml.crearxml");
	    }
	    catch (Exception e) {
	    	new GeneralException("error.interfaz.xml.rutanoencontrada");
		}
	    return archivo;
	}
}
